Programadores profesionales

Las diferencias en el aspecto educativo y laboral entre programadores de Estados Unidos y de América Latina en 2020

Integrantes

  • Luis Berrospi (líder)

  • Bryan Castillo

  • Luis Robledo

  • Jorge Collazos

  • Nincol Quiroz

Actividades

Semana Actividad
2 Búsqueda de temas y Bases de datos
2 (P0) Realizar documento
3 Definir variables y datos
4 Realizar Introducción y objetivos
5 (P1) Clasificar y describir variables
6 Feedback P1 y descripción de datos
7 Identificar modelos de variable aleatoria
8 (P2) Hipótesis de relación entre variables
9 Feedback P2
10 Realizar análisis de fiabilidad
11 Realizar pruebas de hipótesis o intervalos de confianza
12 Revisar relaciones entre variables (regresión)
14 (P3) Revisar Formato de entrega
15 Feedback P3 y revisar variables más importantes del proyecto
16 (P4) Reflexión sobre preguntas iniciales

Introducción

Son muchas las personas que se dedican profesionalmente a programar en todo el mundo. Sin embargo, las características de estas y el contexto en el que viven no son iguales. Tenemos la hipótesis de que el lugar de procedencia influye bastante en la situación tanto laboral como educativa de los programadores profesionales, por lo que decidimos realizar este análisis concentrándonos en lugares bastante distintos en desarrollo respecta, Latino América y Estados Unidos. Este estudio es importante porque lograremos observar si es que realmente existen estas diferencias. Además, si las hay, podremos identificar donde es que se encuentran para poder sugerir que es lo que una región está haciendo mejor o peor que la otra y se pueda encontrar una solución al verdadero problema.

Objetivos

En este estudio tenemos los siguientes objetivos:

  • Identificar la existencia de diferencias en el aspecto educativo y laboral entre programadores profesionales de América Latina y Estados Unidos.

  • Identificar el grado de las diferencias, así como cuales son las que presentan mayor brecha

  • Identificar las variables que no presentan diferencia alguna

Preguntas de investigación

  • ¿Cual es la diferencia entre el genero y las edades de los desarrolladores profesionales según la región en la que viven? (Genero y edad)

  • ¿Cómo influye la región en la que los desarrolladores profesionales viven en su educación?

    • ¿Como influye la región en la que los desarrolladores profesionales viven en su grado educativo? (grado educativo)

    • ¿Como influye la región en la que los desarrolladores profesionales viven en la edad a la que escribieron su primer programa (1st year code)

    • ¿Como influye la región en la que los desarrolladores profesionales viven en la frecuencia con la que aprenden un nuevo lenguaje/framework? (new learn)

  • ¿Cómo influye la región en la que los desarrolladores profesionales viven en su trabajo?

    • ¿Cómo influye la región en la que los desarrolladores profesionales viven en las empresas en las que trabajan? (org size, satisfaction, onboarding)

    • ¿Existe diferencia entre los años que llevan programando de manera profesional los desarrolladores de Estados Unidos y los de América Latina? (years code)

    • ¿Cómo influye la región en la que los desarrolladores profesionales viven en su situacion de busqueda laboral? (job seek)

    • ¿Cómo influye la región en la que los desarrolladores profesionales viven en la forma en la que trabajan? (horas extra, lenguajes con los que trabajaron, weekly worked ours, employment)

    • ¿Existe una relación entre la remuneraron anual total y la región en la que los desarrolladores viven? (converted comp)

Marco teórico

  • Población objetivo: Personas que son o fueron programadores profesionales y son de América Latina o de Estados Unidos

  • Muestra: Programadores profesionales que usan constantemente el foro “Stack Overflow”

  • Muestreo: Por conveniencia, pues se seleccionaron a las personas que usan Stack Overflow

  • Base de Datos: La base de datos es el resultado de la Stack Overflow Developer Survey 2020, esta encuesta busca saber cómo es que aprenden, que herramientas usan y que y como se relacionan con el foro cualquier persona que sabe programar. La base de datos cuenta con cerca de 65000 observaciones totales y 61 variables, pero para este trabajo, delimitamos las observaciones según lo realmente necesitábamos.

Limpieza de datos:

Cargamos la base de datos original y procedimos a revisar los datos de las personas en las regiones que nos interesan, pudimos observar que personas que marcaron que tenían la edad de 1, 10 y 99 años, tenían otros datos irreales, como cantidad de horas trabajadas semanalmente muy altas o les faltaba una cantidad importante de datos, por estos motivos consideramos que eran datos inválidos. A lo largo del trabajo, identificaremos que hay más datos erróneos, sin embargo no eliminaremos las observaciones completas, simplemente se les asignara NA para que no afecte la representatividad de otras variables. Cuando esto suceda se comentara en el análisis de las variables.

Segmentación del Data Frame original:

DFF <- select(df, MainBranch, Country,Gender,Age, ConvertedComp, YearsCodePro ,EdLevel,Employment, JobSat, OrgSize, WorkWeekHrs, NEWOvertime, NEWOnboardGood, JobSeek, NEWLearn, LanguageWorkedWith, Age1stCode)

DFF$YearsCodePro[DFF$YearsCodePro == "Less than 1 year"] <- NA
DFF$YearsCodePro[DFF$YearsCodePro == "More than 50 years"] <- NA


DFF$Age1stCode[DFF$Age1stCode == "Older than 85"] <- NA
DFF$Age1stCode[DFF$Age1stCode == "Younger than 5 years"] <- NA

DFF$YearsCodePro <- as.double(DFF$YearsCodePro)
DFF$Age1stCode <- as.double(DFF$Age1stCode)

DF_USA <- DFF[DFF$Country == "United States" & !is.na(DFF$Country) & DFF$MainBranch == "I am a developer by profession" & !is.na(DFF$MainBranch), ][3:17]
DF_LA <- cbind(region = as.character(countrycode(sourcevar = DFF$Country,
                            origin = "country.name",
                            destination = "region")), DFF)
DF_LA <- DF_LA[DF_LA$region == "Latin America & Caribbean" & !is.na(DF_LA$region) & DFF$MainBranch == "I am a developer by profession" & !is.na(DFF$MainBranch), ][, 4:18]
DF_MIX <- cbind(region = as.character(countrycode(sourcevar = DFF$Country,
                            origin = "country.name",
                            destination = "region")), DFF)
DF_MIX <- DF_MIX[((DF_MIX$region == "Latin America & Caribbean" & !is.na(DF_MIX$region)) | (DF_MIX$Country == "United States" & !is.na(DF_MIX$Country))) &  DF_MIX$MainBranch == "I am a developer by profession" & !is.na(DF_MIX$MainBranch), ][, 3:18]
DF_MIX$Country[DF_MIX$Country != "United States"] <- "América Latina"
DF_MIX$Country[DF_MIX$Country == "United States"] <- "Estados Unidos"
colnames(DF_MIX)[which(names(DF_MIX) == "Country")] <- "Region"

Creamos 2 data frames: DF_USA para guardar los datos de los programadores profesionales de Estados Unidos con 9452 observaciones y DF_LA para los datos de los de América Latina con 3032 observaciones. El estudio original contenía 61 variables, entre las cuales se encontraban múltiples relacionadas con el uso del foro y que no nos interesaban para este estudio, respecto a las demás variables, decidimos quedarnos con 15 que consideramos claves para describir la situación educativa y laboral de los programadores profesionales. Por último, decidimos crear un tercer data frame, DF_MIX para que sea la unión de los dos anteriores con una variable más, “Región” para distinguirlos entre los que son de Estados Unidos y de América Latina, con el objetivo de simplificar el calculo de algunos descriptores en el futuro.

Integridad de los datos

Datos Faltantes(%):

round(sum(is.na(DF_MIX))/(nrow(DF_MIX)*ncol(DF_MIX))*100, 2)
[1] 11.31

Observaciones incompletas(%):

100 - round(sum(complete.cases(DF_MIX))/(nrow(DF_MIX))*100, 2)
[1] 40.68

Podemos ver que tenemos un gran porcentaje de observaciones incompletas (34,71%), sin embargo, a estas no les faltan mucho datos, pues tenemos 10.26% de datos faltantes. No eliminaremos las observaciones incompletas pues reduciría la representatividad de nuestra muestra, así que lo que se hará será no considerar los datos NA para los indicadores en los que estos estén presentes.

Tabla descriptores

A continuación, se especifican las variables con las que trabajaremos y su tipo, así como la pregunta que se realizó originalmente en la encuesta

Pregunta Variable Tipo de Variable
Which of the following describe you, if any? Please check all that apply. If you prefer not to answer, you may leave this question blank. Género Nominal
What is your age (in years)? If you prefer not to answer, you may leave this question blank. Edad Discreta
Including any education, how many years have you been coding in total? Años programando Discreta
NOT including education, how many years have you coded professionally (as a part of your work)? Años programando profesionalmente Discreta
Which of the following best describes the highest level of formal education that you’ve completed? Grado educativo Ordinal
Which of the following best describes your current employment status? Tipo de empleo Nominal
Which programming, scripting, and markup languages have you done extensive development work in over the past year, and which do you want to work in over the next year? (If you both worked with the language and want to continue to do so, please check both boxes in that row Lenguajes con los que se trabajó Nominal
How frequently do you learn a new language or framework? Frecuencia de aprendizaje de un nuevo lenguaje/framework Ordinal
At what age did you write your first line of code or program? (e.g., webpage, Hello World, Scratch project) Edad a la que realizó primer programa Discreta
how often do you work overtime or beyond the formal time expectation of your job? Frecuencia de horas extra Ordinal
Do you think your company has a good onboarding process? (By onboarding, we mean the structured process of getting you settled in to your new role at a company) Proceso de incorporación Nominal
Which of the following best describes your current job-seeking status? Situación de empleo Nominal
How satisfied are you with your current job? (If you work multiple jobs, answer for the one you spend the most hours on.) Satisfacción laboral Ordinal
Approximately how many people are employed by the company or organization you currently work for? Cantidad de empleados Ordinal
On average, how many hours per week do you work? Please enter a whole number in the box. Horas de trabajo semanales Continua

Respondiendo a las preguntas de investigación

¿Cual es la diferencia entre el género y las edades de los desarrolladores profesionales según la región en la que viven?

Se decidió realizar un análisis de aspectos generales como lo son la edad y el género de los desarrolladores previo al del aspecto educativo y laboral para poder mostrar otras variables que también se consideraron importantes pero no se podían clasificar en esas dos categorías.

Género

Se procederá a analizar la variable de género, pues esta permitirá ver si es que existe una brecha de género entre las personas que son desarrolladores profesionales y si esta depende de la región en la que viven.

temp = DF_USA$Gender[!is.na(DF_USA$Gender)]
gender_vec_USA <- vector()
gender_vec_LA <- vector()
for (pal in temp) {
  for (sub_pal in strsplit(pal, ";")) {
    gender_vec_USA <- c(gender_vec_USA, sub_pal)
  }
}
temp = DF_LA$Gender[!is.na(DF_LA$Gender)]
gender_vec <- vector()
for (pal in temp) {
  for (sub_pal in strsplit(pal, ";")) {
    gender_vec_LA <- c(gender_vec_LA, sub_pal)
  }
}

layout(matrix(c(1,2,3,3), ncol=2, byrow=TRUE), heights=c(10, 1))
par(mai=rep(0.5, 4))

temp = table(gender_vec_USA)
man <- round(temp[1]/length(gender_vec_USA)*100,2)
other <- round(temp[2]/length(gender_vec_USA)*100,2)
woman <- round(temp[3]/length(gender_vec_USA)*100,2)
pie(table(gender_vec_USA), main = "Estados Unidos", labels = c(paste(man, "%", sep = ""), paste(other, "%", sep = ""), paste(woman, "%", sep = "")), col = c("skyblue","orange","red"))
temp = table(gender_vec_LA)

man <- round(temp[1]/length(gender_vec_LA)*100,2)
other <- round(temp[2]/length(gender_vec_LA)*100,2)
woman <- round(temp[3]/length(gender_vec_LA)*100,2)
pie(table(gender_vec_LA), main = "América Latina", labels = c(paste(man, "%", sep = ""), paste(other, "%", sep = ""), paste(woman, "%", sep = "")), col = c("skyblue","orange","red"))
par(mai=c(0,0,0,0))
plot.new()
legend(x="center", ncol=3,legend=c("Hombre","Otros","Mujer"),
       fill=c("skyblue","orange","red"))

Se decidió utilizar el gráfico de pie porque se cuenta con pocas categorías y las diferencias entre estas resaltan bastante. Se puede observar como, si bien la proporción de mujeres que se dedican en Estados Unidos es el doble que la proporción en América Latina, en ambas regiones la brecha de género es bastante grande lo que lleva a la hipótesis, al analizar el indicador, de que la gran mayoría de los programadores profesionales y que esto no depende la región en la que viven.

Edad

A continuación, se analizará la variable edad, para identificar si es que hay diferencia entre las edades de las personas que se dedican profesionalmente a la programacion en Estados Unidos y América Latina

boxplot(DF_MIX$Age~DF_MIX$Region, na.rm= T, xlab = "Edad", ylab = "Región", notch=TRUE, horizontal = TRUE, main='Edad de programadores por región')
abline(v=mean(DF_USA$Age, na.rm = TRUE), col = "red", lwd=2)
abline(v=mean(DF_LA$Age, na.rm = TRUE), col = "blue",lwd=2)
legend(60,1.7,legend=c("media EEUU", "media Latam"),col=c("red", "blue"),lwd=2)

Se decidió usar un gráfico de cajas y bigotes porque este permite observar múltiples indicadores numéricos a la vez. Se puede apreciar en este indicador gráfico que las edades de los programadores profesionales están más concentradas en América Latina, para comprobar esto se hacer uso del indicador de rango intercuartílico y se ve que en efecto, hay una diferencia de 3 años:

IQR(DF_LA$Age, na.rm = TRUE)
[1] 9
IQR(DF_USA$Age, na.rm = TRUE)
[1] 12

Continuando con el análisis de la variable, se puede usar el promedio de la edad de los programadores para comparar fácilmente un representante de los programadores de cada región y ver si hay diferencia. Se puede notar que la edad de los profesionales de América Latina es de 30.14 mientras que en Estados Unidos es de 34.33, poco más que 4 años de diferencia.

round(mean(DF_LA$Age, na.rm = TRUE), 2)
[1] 30.16
round(mean(DF_USA$Age, na.rm = TRUE),2)
[1] 34.32

Para finalizar con confirmación de una diferencia real, se hace uso del parámetro notch del gráfico de cajas y bigotes para ver si la diferencia entre las medianas es estadísticamente significativas con un 95% de intervalo de confianza, si estas se sobreponen, significa que prácticamente no hay diferencia de medianas, por el otro lado, si no se sobreponen si existe dicha diferencia. Este parámetro se seguirá utilizando a lo largo del estudio. En esta caso se aprecia que las muescas no se superponen, por lo que podemos calcular las medianas y determinar cual es la diferencia real, pues puede que los promedios estén sesgados por valores atípicos. Existe una diferencia de 3 años.

round(median(DF_LA$Age, na.rm = TRUE), 2)
[1] 29
round(median(DF_USA$Age, na.rm = TRUE),2)
[1] 32

Respondiendo pregunta de investigación

Luego del análisis de la variable utilizando descriptores, se llega a la hipótesis de que si hay una diferencia entre la edad de los desarrolladores de Estados Unidos y la de los de América Latina. Sin embargo, esta no es abismal pues solo ronda los 3 y 4 años.

¿Cómo influye la región en la que viven los desarrolladores profesionales en su educación?

Para responder esta pregunta se decidio realizar un análisis de aspectos generales como el grado educactivo, la edad a la que realizó primer programa y la frecuencia de aprendizaje de un nuevo lenguaje, ya que estás brinda un paranorama de la formación acedémica de los desarrolladores profesionales en las dos regiones (Estados Unidos y América Latina).

¿Cómo influye la región en la que viven los desarrolladores profesionales en su grado educativo?
Grado educativo

Se analizará la variable grado educativo en ambas regiones porque permitirá ver si existe un brecha educativa entre los desarrolladores profesionales de Estados Unidos y América Latina.

tableUSA_WFR <- table(DF_USA$EdLevel)
tableUSA <- prop.table(tableUSA_WFR)
tableUSA <- tableUSA[c(3, 6, 8, 9, 1, 2, 4, 7, 5)]
tablaUSA_DF <- data.frame(names(tableUSA_WFR), as.vector(tableUSA))
names(tablaUSA_DF) <- c('Grado estudio - Estados Unidos','Frecuencia Relativa')
tablaUSA_DF
names <- c("GA", "L", "NCE", "M", "OD", "EP", "TP", "ES", "ST")
names <- names[c(3, 6, 8, 9, 1, 2, 4, 7, 5)]
tableLA_WFR <- table(DF_LA$EdLevel)
tableLA <- prop.table(tableLA_WFR)
tableLA <- tableLA[c(3, 6, 8, 9, 1, 2, 4, 7, 5)]
tableLA_DF <- data.frame(names(tableLA_WFR), as.vector(tableLA))
names(tableLA_DF) <- c('Grado estudio - América Latina','Frecuencia Relativa')
tableLA_DF
layout(matrix(c(1,2,3,3), ncol=2, byrow=TRUE), heights=c(6, 2))
par(mai=rep(0.8, 4))
barplot(tableUSA, las=2, names.arg=names, main='Grados educativos en Estados Unidos', xlab = "Grados educativos",  ylab = "Frecuencia relativa", col=c("skyblue","orange","red","beige","aliceblue","black","azure", "burlywood3", "cornflowerblue"),xlim=c(0,10), ylim = c(0, 0.6), cex.names=0.8)
barplot(tableLA, las=2, names.arg=names, main='Grados educativos en América Latina', xlab = "Grados educativos",  ylab = "Frecuencia relativa", col=c("skyblue","orange","red","beige","aliceblue","black","azure", "burlywood3", "cornflowerblue"),xlim=c(0,10), ylim = c(0, 0.6), cex.names=0.8)
par(mai=c(0,0,0,0))
plot.new()
legend(x="center", ncol=2, legend = c("Nunca Completé ninguna Educación formal", "Escuela Primaria", "Escuela Secundaria", "Estudios Superiores sin obtener un Título", "Grado Asociado", "Licenciatura", "Maestría", "Título Profesional", "Otro Doctorado"), fill=c("skyblue","orange","red","beige","aliceblue","black","azure", "burlywood3", "cornflowerblue"))

En este estudio se contemplaron 9 diferentes grados de estudios, en algunos casos la diferencia entre ellos es abismal. Por lo tanto, para poder observar mejor las diferencias se utilizó gráficos de barra, además para poder tener una mejor visualización de las diferencias de frecuencia relativa entre Estados Unidos y América Latina se optó por poner los gráficos uno al costado de otro.

Los gráficos de barras muestran que la mayoría de los programadores tanto estadounidenses como latinoamericanos tienen licenciatura, si se compara, existe una mayor frecuencia relativa de programadores con licenciatura en Estados Unidos que en América Latina.

Por otro lado, en América Latina existe una mayor frecuencia relativa de programadores que no terminaron sus estudios universitarios en comparación con Estados Unidos.

Luego del análisis de la variable, se puede presentar la hipótesis de que la mayoría de desarrolladores profesionales tanto de Estados Unidos como de América Latina tienen el grado académico de licenciados.

¿Cómo influye la región en la que los desarrolladores profesionales viven en la edad a la que escribieron su primer programa?
Edad a la que realizó primer programa

Se analizará la variable edad a la que realizó primer programa en ambas regiones porque permitirá ver si existe un diferencia al momento de realizar su primer programa entre los desarrolladores profesionales de Estados Unidos y América Latina.

Para la limpieza de datos descartamos aquellos datos en donde la edad de primer programa de algún programador era mayor que la edad actual del mismo, ya que no tendría sentido que la edad a la que escribió su primer código sea mayor que la edad actual de algún programador.

DF_MIX <- DF_MIX[!(DF_MIX$Age1stCode > DF_MIX$Age) & !is.na(DF_MIX$Age1stCode) & !is.na(DF_MIX$Age),]
DF_USA <- DF_USA[!(DF_USA$Age1stCode > DF_USA$Age) & !is.na(DF_USA$Age1stCode) & !is.na(DF_USA$Age),]
DF_LA <- DF_LA[!(DF_LA$Age1stCode > DF_LA$Age) & !is.na(DF_LA$Age1stCode) & !is.na(DF_LA$Age),]



boxplot(as.numeric(DF_MIX$Age1stCode)~DF_MIX$Region, na.rm= TRUE, ylab = "Region", xlab = "Años", notch = TRUE, horizontal = TRUE, main='Edad primer programa por region')
abline(v=mean(as.numeric(DF_USA$Age1stCode), na.rm = TRUE), col = "red")
abline(v=mean(as.numeric(DF_LA$Age1stCode), na.rm = TRUE), col = "blue")

legend(25, 1.7, legend=c("media EEUU", "media Latam"), col=c("red", "blue"),lwd=2 )

Decidimos utilizar un boxplot ya que nos permite ver múltiples descriptores de manera eficiente. Nos fijamos en que la diferencia de las medianas para comparar los valores y vemos que son estadísticamente significativas y que se diferencian en 2 años. Además calculamos la media para ver el sesgo de la gráfica y vemos que al coincidir con la media en el caso de América Latina, significa que la distribución es simétrica.

median(DF_USA$Age1stCode, na.rm = TRUE)
[1] 14
median(DF_LA$Age1stCode, na.rm = TRUE)
[1] 16

Además, se puede apreciar que las edades de los programadores profesionales están más concentradas en América Latina, para comprobar ello se usa el rango intercuartílico, en este se puede apreciar una diferencia de 1 año.

IQR(DF_LA$Age1stCode, na.rm = TRUE)
[1] 4
IQR(DF_USA$Age1stCode, na.rm = TRUE)
[1] 5

Para saber a que edad en promedio realizaron su primer programa se usará la mediana. Se puede notar que en América Latina la edad promedio es 15.95 y en Estados Unidos es 14.81, la diferencia es de un poco más de un año.

round(mean(DF_LA$Age1stCode, na.rm = TRUE), 2)
[1] 15.95
round(mean(DF_USA$Age1stCode, na.rm = TRUE),2)
[1] 14.81

Luego del análisis de la variable, se llega a la hipótesis de que en Estados Unidos realizan su primer programa antes que en América Latina. Sin embargo, la diferencia es de apenas un poco más de un año, además en América Latina las edades están mas concentradas.

¿Cómo influye la región en la que los desarrolladores profesionales viven en la frecuencia con la que aprenden un nuevo lenguaje?
Frecuencia de aprendizaje de un nuevo lenguaje

Se analizará la variable frecuencia de aprendizaje de un nuevo lenguaje en ambas regiones porque permitirá identificarla frecuencia de aprendizaje entre los desarrolladores profesionales de Estados Unidos y América Latina.

#usa
temp = DF_USA$NEWLearn[!is.na(DF_USA$NEWLearn)]

tiemponames <- c("Pocos meses", "Una vez al año", "Pocos años", "Una por década")

tabla_NEWLearn_USA_F = table(temp)
tabla_NEWLearn_USA_FR = prop.table(tabla_NEWLearn_USA_F)
tabla_NEWLearn_USA_FR <- tabla_NEWLearn_USA_FR[c(1, 3, 4, 2)]
tabla_NEWLearn_USA_P = data.frame(tiemponames, as.vector(tabla_NEWLearn_USA_F), as.vector(tabla_NEWLearn_USA_FR))

names(tabla_NEWLearn_USA_P) <- c('Frecuencia de aprendizaje USA', 'Frecuencia de aprendizaje', 'Frecuencia Relativa')
tabla_NEWLearn_USA_P
par(mfrow=c(1, 2))

barplot(tabla_NEWLearn_USA_FR, names.arg=tiemponames, xlab = 'Frecuencia de aprendizaje', ylab = 'Frecuencias Relativas', main="Frecuencia de aprendizaje USA", col=c("skyblue","orange","red","beige"), ylim = c(0,0.5), cex.names = 0.4, las =0.7)
#LA
temp2 = DF_LA$NEWLearn[!is.na(DF_LA$NEWLearn)]
tabla_NEWLearn_LA_F= table(temp2)
tabla_NEWLearn_LA_FR = prop.table(tabla_NEWLearn_LA_F)
tabla_NEWLearn_LA_FR <- tabla_NEWLearn_LA_FR[c(1, 3, 4, 2)]
tabla_NEWLearn_LA_P = data.frame(tiemponames, as.vector(tabla_NEWLearn_LA_F), as.vector(tabla_NEWLearn_LA_FR))

names(tabla_NEWLearn_LA_P) <- c('Frecuencia de aprendizaje Latinoamérica', 'Frecuencia', 'Frecuencia Relativa')
tabla_NEWLearn_LA_P
barplot(tabla_NEWLearn_LA_FR, names.arg=tiemponames, xlab = 'Frecuencia de aprendizaje', ylab = 'Frecuencias Relativas', main="Frecuencia de aprendizaje LA", col=c("skyblue","orange","red","beige"), ylim = c(0,0.5), cex.names = 0.4, las =0.7)

Para esta variable también se hace uso de un gráfico de barras ya que nos permite ver que “tiempo de aprendizaje” es más común, asimismo esto nos permite una comparación rápida entre ambas regiones para un mejor análisis.

Se observa que en USA la mayoría de los programadores aprenden un nuevo lenguaje cada año, seguido de pocos meses, mientras que en Latinoamérica la mayoría aprenden un nuevo lenguaje cada pocos meses, seguido de un año. Resaltando que en Latinoamérica hay un mayor ritmo de aprendizaje de un nuevo lenguaje.

También, podemos comprobar con la moda que la frecuencia de aprendizaje más común en Estados Unidos es un nuevo lenguaje por año, mientras que en América Latina en uno cada pocos meses.

mlv(DF_USA$NEWLearn)
[1] "Once a year"
mlv(DF_LA$NEWLearn)
[1] "Every few months"

Luego del análisis de la variable, se puede presentar la hipótesis que en Estados Unidos tiene una menor frecuencia de aprendizaje de un nuevo lenguaje que América Latina.

Respondiendo pregunta de investigación

Después de analizar las siguientes variables: grado educativo, edad a la que realizó primer programa y frecuencia de aprendizaje de un nuevo lenguaje a través de los descriptores. Se llega a la hipótesis que en Estados Unidos tiene una menor frecuencia de aprendizaje de un nuevo lenguaje que en América Latina, pero en este país realizan su primer programa antes que en América Latina y no existe una diferencia entre el grado educativo de los programadores en ambas regiones.

¿Cómo influye la región en la que los desarrolladores profesionales viven en su trabajo?

¿Cómo influye la región en la que los desarrolladores profesionales viven en las empresas en las que trabajan?

Se procederá a realizar un alálisis de las variables ‘Tamaño de organización en la que trabaja’, ‘Satisfacción con empleo’, y ‘Proceso de incorporación’ ya que estas variables ayudarán a comprobar con mayor precisión si realmente la region en donde los desarrolladores viven influye en las empresas en las que trabajan.

Tamaño de organización en la que trabaja

Se procederá a analizar la variable ‘Tamaño de organización en la que trabaja’ y comparar la cantidad de empleados de las empresas u organizaciones en la que los desarrolladores de America Latina y Estados Unidos trabajan

empleados_LA <- table(DF_LA$OrgSize)
empleados_LA <- empleados_LA[c(9, 5, 2, 6, 4, 8, 1, 7, 3)]
empleados_USA <- table(DF_USA$OrgSize)
empleados_USA <- empleados_USA[c(9, 5, 2, 6, 4, 8, 1, 7, 3)]
legend_text <- c("1000 a 4999 empleados","10 a 19 eempleados", "10000 o más empleados", "100 a 499 empleados", "2 a 9 empleados", "20 a 99 empleados", "5000 a 9999 empleados", "500 a 999 empleados", "Solo yo")
legend_text <- legend_text[c(9, 5, 2, 6, 4, 8, 1, 7, 3)]
color_LA <- c("red", "yellow", "pink", "blue", "green", "orange", "black", "purple", "gray")
variables <- c(" "," "," "," "," "," "," "," "," ")

layout(matrix(c(1,2,3,3), ncol=2, byrow=TRUE), heights=c(7, 1))
par(mai=rep(0.8, 4))

barplot(empleados_LA/sum(empleados_LA), names.arg = variables, col = color_LA, ylab ="Frecuencias Relativas", las=2, ylim=c(0,0.4), xlim = c(0, 10), main = "Tamaño de las organizaciones o empresas en América Latina", cex.main=0.8)

barplot(empleados_USA/sum(empleados_USA), names.arg = variables, col = color_LA, ylab ="Frecuencias Relativas", las=2, ylim=c(0,0.4), xlim = c(0, 10), main = "Tamaño de las organizaciones o empresas en Estados Unidos", cex.main=0.8)

par(mai=c(0,0,0,0))
plot.new()
legend(x="center", ncol=3,legend=legend_text, fill=color_LA)

Al igual que en el apartado anterior se utiliza la gráfica de barras, debido a que la diferencias entre las frecuencias relativas no son muy grandes por lo tanto visualmente no se aprecia barras muy pequeñas como si su valor fuera 0. Según las gráficas de barras de Estados Unidos la mayoría de los encuestados labora en un entorno con 10000 o más empleados (frecuencia absoluta de 1915), así mismo en América Latina la mayoría de encuestados labora en un entorno de 20 a 99 empleados.

Satisfacción con empleo

Se procederá a realizar una análisis de esta variable para verificar la diferencia que hay en cuanto a la satisfaccion de empleo de los desarrolladores de America Latina y Estados Unidos.

variables1 <- c("MS", "AS", "NSN", "AI", "MI")
temp = DF_USA$JobSat[!is.na(DF_USA$JobSat)]
satis_vector_USA <- vector()
satis_vector_LA <- vector()
for (pal in temp) {
  for (sub_pal in strsplit(pal, ";")) {
    satis_vector_USA <- c(satis_vector_USA, sub_pal)
  }
}
temp = DF_LA$JobSat[!is.na(DF_LA$JobSat)]
satis_vector <- vector()
for (pal in temp) {
  for (sub_pal in strsplit(pal, ";")) {
    satis_vector_LA <- c(satis_vector_LA, sub_pal)
  }
}

layout(matrix(c(1,2,3,3), ncol=2, byrow=TRUE), heights=c(7, 1))
par(mai=rep(0.8, 4))


barplot(table(satis_vector_USA)/sum(table(satis_vector_USA)), main = "Estados Unidos", names.arg = variables1, col = c("blue","orange","yellow", "green", "red"), ylab ="Frecuencias Relativas", xlab = "Grado de satisfacción")



barplot(table(satis_vector_LA)/sum(table(satis_vector_LA)), names.arg = variables1 , main = "América Latina", col = c("blue","orange","yellow", "green", "red"), ylab ="Frecuencias Relativas", xlab = "Grado de satisfacción", ylim = c(0, 0.4))

par(mai=c(0,0,0,0))
plot.new()
legend(x="center", ncol=2,legend=c("Muy Satisfecho","Algo Satisfecho","Ni Satisfecho Ni insatisfecho", "Algo Insatisfecho", "Muy Insatisfecho"), fill=c("blue","orange","yellow", "green", "red"))

Los grados de satisfacción son 5 y la diferencia entre las frecuencias relativas no son grandes, por lo tanto, es visualmente mejor comparar la frecuencia relativa de los grados de satisfacción mediante barras rectangulares, de modo que en este apartado se utiliza el grafico de barras. En la gráfica podemos ver que América Latina tiene un nivel de satisfacción mayor con su trabajo que Estado Unidos. Así mismo, en Estados Unidos el 48.18% de los encuestados están insatisfechos con su empleo. Además, la mayoría de los programadores en América Latina se encuentra ni satisfechos ni insatisfechos con su empleo.

Proceso de incorporación

Se Procederá a realizar una analisis de la varaible ‘Proceso de Incorporación’ para Verificar las diferencias que hay en el acoplamiento de nuevos desarrolladores en las empresas u organizaciones de America Latina y Estados Unidos.

Se uso gráficos de tortas ya que representa de manera ordenada y fácil de entender el porcentaje de respuestas a la pregunta por cada región y contamos con pocas categorias.

De estos gráficos, se puede observar que tanto en América Latina como en Estados Unidos, las empresas tienen un buen proceso de incorporación (no todas), pero es ligeramente mejor en Estados Unidos, lo que implica que en América Latina existen más empresas con un mal proceso de incorporación.

En base al análisis de estas tres variables, se llega a la hipótesis de que en Estados Unidos es más accesible conseguir un empleo en empresas grandes, a diferencia de America Latina. Así mismo, trabajar como desarrollador en Estados Unidos puede resultar mas tedioso, ya que los desarrolladores de esta región se sienten mas insatisfechos con su empleo, a diferencia de America Latina, donde hay un menor grado de insatisfacción, y un mayor grado de neutralidad. Además se puede decir que el proceso de incorporacion de nuevos empleados a las empresas es practicamente igual en Estados Unidos y America Latina, ya que la diferencia de los resultados obtenidos en ambas regiones es mínima.

¿Existe diferencia entre los años que llevan programando de manera profesional los desarrolladores de Estados Unidos y los de América Latina?

Se procederá a hacer un análisis de la variable “Años programando profesionalmente” que indica la cantidad de años que los desarrolladores llevan programando sin contar los años de educación en cada región para poder determinar si existe una diferencia o otro tipo de relación entre la variable y región.

Años programando profesionalmente

Para la limpieza de datos se utilizó el criterio de que una persona no puede tener más años codeando como profesional que años de vida, pues una situación como esta sería ilógica.

DF_MIX$YearsCodePro[(DF_MIX$YearsCodePro > DF_MIX$Age) & !is.na(DF_MIX$YearsCodePro) & !is.na(DF_MIX$Age)]  <- NA
DF_LA$YearsCodePro[(DF_LA$YearsCodePro > DF_LA$Age) & !is.na(DF_LA$YearsCodePro) & !is.na(DF_LA$Age)]  <- NA
DF_USA$YearsCodePro[(DF_USA$YearsCodePro > DF_USA$Age) & !is.na(DF_USA$YearsCodePro) & !is.na(DF_USA$Age)]  <- NA

boxplot(as.numeric(DF_MIX$YearsCodePro)~DF_MIX$Region, na.rm= TRUE, ylab = "Región", xlab = "Años", notch = TRUE, horizontal = TRUE, main='Años programando profesionalmente por región')
abline(v=mean(as.numeric(DF_USA$YearsCodePro), na.rm = TRUE), col = "red")
abline(v=mean(as.numeric(DF_LA$YearsCodePro), na.rm = TRUE), col = "blue")
legend(25,1.7,legend=c("media EEUU", "media Latam"),col=c("red", "blue"),lwd=2)

Se decidió utilizar un gráfico de cajas y bigotes porque este ya incluye muchos otros descriptores numéricos, como la mediana y el rango intercuartílico. En este diagrama se observa que las medianas no se sobreponen en el rango de las muescas y que la de los programadores de Estados Unidos es más más alta en comparación con la de los programadores de América Latina.

round(median(DF_LA$YearsCodePro, na.rm = TRUE), 2)
[1] 6
round(median(DF_USA$YearsCodePro, na.rm = TRUE),2)
[1] 8

También destaca la diferencia de 4 años en el tercer cuartil de ambas regiones; es decir, el 75% de los programadores estadounidenses cuentan a los mucho con 15 años programando profesionalmente y los latinoamericanos con 11 años.

quantile(DF_LA$YearsCodePro, na.rm = TRUE)
  0%  25%  50%  75% 100% 
   1    3    6   11   50 
quantile(DF_USA$YearsCodePro, na.rm = TRUE)
  0%  25%  50%  75% 100% 
   1    4    8   15   49 

Continuando con el análisis, se toma las medias de ambas regiones, y se observa una diferencia de más de 2 años, siendo mayor para Estados Unidos, confirmando lo que ya sugerían las medianas.

round(mean(DF_LA$YearsCodePro, na.rm = TRUE), 2)
[1] 8.28
round(mean(DF_USA$YearsCodePro, na.rm = TRUE),2)
[1] 10.75

A partir del análisis y las comparaciones, se llega a la hipótesis de que sí existe una diferencia entre Estados Unidos y América Latina en cuanto a los años programando profesionalmente, la comparación de medianas, sugiere que los programadores profesionales de Estados Unidos llevan programando más años que los de América Latina, sin embargo, esta diferencia no es muy notoria, ya que es solo de 2 años.

¿Cómo influye la región en la que los desarrolladores profesionales viven en su situación de búsqueda laboral?

Se realizará un análisis de la variable “Situación de búsqueda de empleo”, que describe si los programadores profesiones se encuentran o no buscando trabajo o si están abiertos a nuevas oportunidades en cada región, para determinar si existe una influencia de la región en la situación búsqueda laboral de los programadores de cada región.

Situación de búsqueda de empleo

Utilizamos gráficos de barra en base al total de encuestados por región ya que nos permite identificar claramente y de manera ordenada las diferencias de la situación de empleo de los programadores por región.

Podemos observar que la cantidad de programadores que buscan empleo es mayor en América Latina, y la cantidad de programadores que no buscan empleo es mucho mayor en Estados Unidos (17.71%). En cuanto a las otras opciones, también hay diferencia, pero es menor. Esta es de 5% respecto a las personas que buscan un empleo, siendo mayor para Latinoamérica. Igualmente para la última opción, existe mayor disponibilidad a aceptar oportunidades en Latinoamérica, con un 11.89% a comparación de USA.

Respondiendo pregunta de investigación

En base al análisis, se llega a la hipótesis de que la región influye en la situación de búsqueda laboral. Resaltando, que en Latinoamérica, existe un mayor porcentaje de programadores que están disponibles a nuevas oportunidades o buscando un trabajo (un total de 84.04% en América Latina vs un total de 66.34%).

¿Cómo influye la región en la que los desarrolladores profesionales viven en la forma en la que trabajan?

Se analizarán las variables “horas trabajadas semanalmente”, “frecuencia de horas extra en el trabajo”, “tipo de empleo” y “Lenguajes de programación” para dar una posible respuesta para la pregunta, debido a que mediante esas variables podemos comparar entre América Latina y Estados Unidos si es que predominan los trabajos a tiempo completo, que lenguajes se utilizan más en cada región y cuantas horas de trabajo realizan los programadores.
#### Horas trabajadas semanalmente Según la instancia federal del gobierno estadounidense (Internal Revenue Services) para que un trabajo sea considerado a tiempo completo mínimo tiene que cumplir 30 horas semanales, o 130 horas de servicio por mes, sin un límite máximo de horas. Por otra parte, en Latinoamérica según BBC new en ciertos países existen límites de 48 horas semanales y en otros países van de 40 a 47 horas semanales. Se limpiaron los datos siguiendo las fuentes consultas debido a que se encontraron muchos valores que no pueden ser verídicos, como es el caso de trabajar 168 horas a la semana. Así mismo, se estableció las horas semanales considerando 5 días laborales a la semana desde 30 (horas mínimas en estados unidos) a 50 (valor máximo en Latinoamérica añadiendo algunas horas extras) horas para observar una gráfica sin muchos datos atípicos.

horas_LA <- table(DF_LA$WorkWeekHrs)
DF_LA$WorkWeekHrs[DF_LA$WorkWeekHrs < 30 & (DF_LA$Employment == "Employed full-time")] <- NA
DF_LA$WorkWeekHrs[DF_LA$WorkWeekHrs > 50  & (DF_LA$Employment == "Employed full-time")] <- NA

DF_USA$WorkWeekHrs[DF_USA$WorkWeekHrs < 30 & DF_USA$Employment == "Employed full-time"] <- NA
DF_USA$WorkWeekHrs[DF_USA$WorkWeekHrs > 50 & DF_USA$Employment == "Employed full-time"] <- NA

DF_MIX$WorkWeekHrs[DF_MIX$WorkWeekHrs < 30 & DF_MIX$Employment == "Employed full-time"] <- NA
DF_MIX$WorkWeekHrs[DF_MIX$WorkWeekHrs > 50 & DF_MIX$Employment == "Employed full-time"] <- NA

horas_USA <- table(DF_USA$WorkWeekHrs)


mean(DF_LA$WorkWeekHrs, na.rm = TRUE)
[1] 40.46394
mean(DF_USA$WorkWeekHrs, na.rm = TRUE)
[1] 40.82818
color = c("darkblue", "skyblue")
y_LA_median <- mean(DF_LA$WorkWeekHrs, na.rm = TRUE)
y_USA_median <- mean(DF_USA$WorkWeekHrs, na.rm = TRUE)

x_general <- c("Latino América", "Estados Unidos")
y_general <- c(y_LA_median, y_USA_median)

DF_TEMP <-DF_MIX[DF_MIX$Employment == "Employed full-time" & !is.na(DF_MIX$Employment),]


boxplot(DF_TEMP$WorkWeekHrs~DF_TEMP$Region, ylab = "Región", xlab = "Horas", main="Horas trabajadas por semana", notch = FALSE, horizontal = TRUE)

En este apartado se utiliza la gráfica de caja porque ayuda a representar gráficamente variables cuantitativas mediante la distribución de sus cuartiles, además de que permite incluir los datos atípicos. Para la gráfica se consideró a los desarrolladores que trabajan a tiempo completo para que las unidades muestrales sean comparables. Analizando la gráfica se obtuvo que la media de horas que trabajan los encuestados por semana en América Latina es de 40.46 horas y en Estados Unidos es de 40.83.

mean(DF_LA$WorkWeekHrs, na.rm = TRUE)
[1] 40.46394
mean(DF_USA$WorkWeekHrs, na.rm = TRUE)
[1] 40.82818

Para confirmar esta similitud, podemos ver que las medias en el boxplot son iguales 40. Por otro lado también podemos utilizar el coeficiente de variación para ver si los datos están distribuidos de manera similar en proporción a su promedio y vemos que para ambos casos es prácticamente la misma.

sd(DF_USA$WorkWeekHrs, na.rm = TRUE)/mean(DF_USA$WorkWeekHrs, na.rm = TRUE)
[1] 0.1455823
sd(DF_LA$WorkWeekHrs, na.rm = TRUE)/mean(DF_LA$WorkWeekHrs, na.rm = TRUE)
[1] 0.1833667
Frecuencia de horas extra en el trabajo

Esta variable es necesaria estudiarla ya que nos puede dar a conocer la frecuencia de realizar horas extras en los trabajos de los programadores en las dos regiones, para poder comparar la forma de trabajar en los Estados Unidos y América Latina.

Se decidió utilizar la gráfica de barras con porcentajes en base al total de encuestados por región ya que la diferencia del total era grande y estos gráficos nos permiten comparar fácilmente la frecuencia de horas extra de los programadores. El uso de porcentajes y colores hace que sea un gráfico fácil de comprender para el lector.

Analizando las gráficas se obtiene que en América Latina el 26.22% de empleados trabaja horas extra a menudo (de 1 a más días a la semana) y el 28.5% a veces (1 o 2 dos días al mes). En Estados Unidos, las 2 respuestas más votadas son “A veces” y “Ocasionalmente (1o 2 días por trimestre)”, con 26.57% y 25.6% cada una. También se observa que la variable “Nunca” tiene mayor porcentaje en Estados Unidos.

Tipo de empleo

Esta variable es importante para el análisis debido a que permite observar y comparar si los programadores de ambas regiones tienen empleos de tiempo completo, son trabajadores de tiempo parcial, etc. y esto es muy importante a la hora de comparar la forma de trabajar.

tableEmpleoUSA_WFR <- table(DF_USA$Employment)
tableEmpleoUSA <- prop.table(tableEmpleoUSA_WFR)
tableEmpleoUSA_DF <- data.frame(names(tableEmpleoUSA_WFR), as.vector(tableEmpleoUSA))
names(tableEmpleoUSA_DF) <- c('Tipo de empleo','Frecuencia Relativa')
tableEmpleoUSA_DF
namesEmpleo <- c("TC", "TP", "IA", "SEBT", "SEST", "R", "E")


tableEmpleoLA_WFR <- table(DF_LA$Employment)
tableEmpleoLA <- prop.table(tableEmpleoLA_WFR)
tableEmpleoLA_DF <- data.frame(names(tableEmpleoLA_WFR), as.vector(tableEmpleoLA))
names(tableEmpleoLA_DF) <- c('Tipo de empleo','Frecuencia Relativa')
tableEmpleoLA_DF
layout(matrix(c(1,2,3,3), ncol=2, byrow=TRUE), heights=c(8, 2))
par(mai=rep(0.8, 4))

barplot(tableEmpleoUSA, las=1, names.arg=namesEmpleo, main='Empleos en Estados Unidos', xlab = "Tipo de empleo",  ylab = "Frecuencia relativa", col=c("skyblue","orange","red","beige","aliceblue","black","blue"),xlim=c(0,8), ylim = c(0, 1), cex.names=0.8, las=2)

barplot(tableEmpleoLA, las=1, names.arg=namesEmpleo, main='Empleos en América Latina', xlab = "Tipo de empleo",  ylab = "Frecuencia relativa", col=c("skyblue","orange","red","beige","aliceblue","black","blue"),xlim=c(0,8), ylim = c(0, 1),cex.names=0.8, las=2)

par(mai=c(0,0,0,0))
plot.new()
legend(x="center", ncol=3, legend = c("Tiempo Completo","Tiempo Parcial", "Independiente, Autónomo", "Sin Empleo, Buscando Trabajo", "Sin Empleo, Sin buscar Trabajo", "Retirado", "Estudiante"), fill=c("skyblue","orange","red","beige","aliceblue","black","blue"))

Este apartado tiene 7 tipos de empleos diferentes, en algunos casos la diferencia entre ellos es abismal. Por lo tanto, para poder observar mejor las diferencias se utilizó gráficos de barra, además para poder tener una mejor visualización de las diferencias de frecuencia relativa entre Estados Unidos y América Latina se optó por poner los gráficos uno al costado de otro.
Los gráficos de barras muestran que la mayoría de los programadores tanto en Estados Unidos como en América Latina trabajan a tiempo completo, pero existe una mayor frecuencia relativa de programadores trabajando a tiempo completo en Estados Unidos que en América Latina. También se observa que existe mayor frecuencia relativa de latinoamericanos trabajando a medio tiempo y de manera independiente que los estadounidenses.

Lenguajes de programación

Esta variable muestra los leguajes de programación más utilizados en los entornos de trabajo de los programadores, por lo tanto, es importante su análisis para comparar la forma de trabajo por región.

Para esta variable se hizo uso de un barplot por separado para cada región, debido a que existe una cantidad de lenguajes de programación considerable, Además un gráfico de barras nos permite visualizar en que lenguajes se trabajan más, para facilitar esta comparación se ordenó el barplot de manera descendente. Se destaca que entre los lenguajes más usados tanto en Estados Unidos como en América Latina son JavaScript, HTML/CSS, SQL. Es importante resaltar que en Estados Unidos hay un mayor uso de Python que en América Latina.

Respondiendo pregunta de investigación Finalmente, a modo de hipótesis se obtuvo que la forma de trabajo en Estados Unidos y Latino América es similar, debido de que en ambas regiones la mayoría de programadores tiene un empleo a tiempo completo, así mismo, trabajan en los mismos lenguajes de programación siendo el más utilizado JavaScript. La única diferencia se evidencia en las horas extras, pues los programadores de América Latina lo realizan más.

¿Existe una relación entre la remuneración anual total y la región en la que los desarrolladores viven?

Compensación anual en dolares

Según la pagina ZipRecruiter el mínimo Salario anual de un desarrollador en 2020 fue de 33,500 USD y el más alto fue de 138,000 USD

Según la pagina Evalart, un desarrollador en Latinoamérica en el país menos pagado (Argentina) percibe mensualmente 715 USD, para la limpieza se considerara anualmente un salario de 8000 USD, mientras que el país mejor pagado (Panamá) un desarrollador en su máximo nivel (Master) percibe 3500 USD mensuales, anualmente se usara 42000 usd. Se consideró solo a los que trabajan tiempo completo.

Para el DF_MIX se uso el salario anual mínimo de Latinoamérica y el salario máximo de USA.

#DF_USA$ConvertedComp[DF_USA$ConvertedComp > 138000] <- NA
#DF_USA$ConvertedComp[DF_USA$ConvertedComp < 33500] <- NA
#DF_LA$ConvertedComp[DF_LA$ConvertedComp > 42000] <- NA
#DF_LA$ConvertedComp[DF_LA$ConvertedComp < 8000] <- NA
#DF_MIX$ConvertedComp[DF_MIX$ConvertedComp > 138000] <- NA
#DF_MIX$ConvertedComp[DF_MIX$ConvertedComp < 8000] <- NA

DF_TEMP_LA <-DF_LA[DF_LA$Employment == "Employed full-time" & !is.na(DF_LA$Employment),]
DF_TEMP_USA <-DF_USA[DF_USA$Employment == "Employed full-time" & !is.na(DF_USA$Employment),]

hist(DF_TEMP_USA$ConvertedComp, breaks = 30, freq = TRUE, main = "Histograma del salario anual USA", ylab = "Frecuencia", xlab = "Salario anual en dolares")
abline(v=mean(as.numeric(DF_USA$ConvertedComp), na.rm = TRUE), col = "red")

hist(DF_TEMP_LA$ConvertedComp, breaks = 30, freq = TRUE, main = "Histograma del salario anual Latinoamerica", ylab = "Frecuencia", xlab = "Salario anual en dolares")
abline(v=mean(as.numeric(DF_LA$ConvertedComp), na.rm = TRUE), col = "blue")

Para esta variable se hizo uso de histogramas debido a que nos permiten observar la distribución de los desarrolladores por salario, además, nos permite marcar la media, y como estan distribuidos los salarios alrededor de esta, lo que permite un análisis pertinente.

round(mean(DF_LA$ConvertedComp, na.rm = TRUE), 2)
[1] 28901.37
round(mean(DF_USA$ConvertedComp, na.rm = TRUE),2)
[1] 204494.1

En usa se observa una distribución normal respecto a la media, es decir que la mayoría de programadores gana alrededor de 94136 dolares anuales. Por otro lado, en América Latina no existe una distribución muy atípica, pero sí hay más variación respecto a la media, a comparación de USA. Asimismo, se resalta la diferencia entre la media de USA y Latinoamérica, que en USA es un 465.64% mayor.

Relaciones entre variables (TODO)

podemos realizar un análisis de interacción entre las variables de edad en la que realizó su primer programa y años programando profesionalmente

DF_USA_T <-DF_USA[DF_USA$Employment == "Employed full-time" & !is.na(DF_USA$Employment) & !is.na(DF_USA$Age) & !is.na(DF_USA$ConvertedComp),]

#DF_USA_T[(as.numeric(DF_USA_T$Age) < as.numeric(DF_USA_T$Age1stCode) & !is.na(DF_USA_T$Age)),]
DF_LA_T <-DF_LA[DF_LA$Employment == "Employed full-time" & !is.na(DF_LA$Employment) & !is.na(DF_LA$Age) & !is.na(DF_LA$ConvertedComp),]
plot(x = DF_USA_T$Age, y = DF_USA_T$ConvertedComp)
abline(lm(DF_USA_T$Age ~ DF_USA_T$ConvertedComp), col = "red")

plot(x = DF_LA_T$Age, y = DF_LA_T$ConvertedComp)
DF_LA_T
abline(lm(DF_LA_T$Age ~ DF_LA_T$ConvertedComp), col = "red")

cor(x = DF_USA_T$Age,y = DF_USA_T$YearsCodePro, use = "complete.obs")
[1] 0.8608679
cor(x = DF_LA_T$Age,y = DF_LA_T$YearsCodePro, use = "complete.obs")
[1] 0.8277563
DF_caros <- DF_USA[DF_USA$ConvertedComp > 1000000 & !is.na(DF_USA$ConvertedComp), ]
DF_USA_T <- DF_USA
DF_LA_T <- DF_LA
DF_LA_T
plot(x = DF_USA_T$Age, y = as.double(DF_USA_T$Age1stCode), xlab = "Edad", ylab = "")
abline(lm(Age ~ Age1stCode, data = DF_USA_T))

plot(x = DF_LA_T$Age, y = DF_LA_T$Age1stCode)
abline(lm(DF_LA_T$Age ~ DF_LA_T$Age1stCode))

cor(y = DF_USA_T$Age, x = DF_USA_T$Age1stCode, use = "complete.obs")
[1] 0.05284908
cor(y = DF_LA_T$Age, x = DF_LA_T$Age1stCode, use = "complete.obs")
[1] 0.1159329
DF_USA_T <- DF_USA[DF_USA$Employment == "Independent contractor, freelancer, or self-employed" & !is.na(DF_USA$Employment),]
#DF_USA_T[(as.numeric(DF_USA_T$Age) < as.numeric(DF_USA_T$Age1stCode) & !is.na(DF_USA_T$Age)),]
DF_LA_T <- DF_LA[DF_USA$Employment == "Independent contractor, freelancer, or self-employed" & !is.na(DF_LA$Employment),]
#DF_MIX$ConvertedComp[DF_MIX$ConvertedComp > 200000 & !is.na(DF_MIX$ConvertedComp)] <- NA
DF_USA_T$ConvertedComp[DF_USA_T$ConvertedComp > 200000 & !is.na(DF_USA_T$ConvertedComp)] <- NA
DF_LA_T$ConvertedComp[DF_LA_T$ConvertedComp > 200000 & !is.na(DF_LA_T$ConvertedComp)] <- NA
plot(x = DF_USA_T$YearsCodePro, y = DF_USA_T$ConvertedComp, col = "red")
abline(lm(YearsCodePro ~ ConvertedComp, data = DF_USA_T))
#plot(x = DF_LA_T$YearsCodePro, y = DF_LA_T$ConvertedComp)
points(x = DF_LA_T$YearsCodePro, y = DF_LA_T$ConvertedComp, col = "blue")
abline(lm(YearsCodePro ~ ConvertedComp, data = DF_LA_T))

cor(x = DF_USA_T$YearsCodePro,y = DF_USA_T$ConvertedComp, use = "pairwise.complete.obs")
[1] 0.3290684
cor(x = DF_LA_T$YearsCodePro, y = DF_LA_T$ConvertedComp, use = "pairwise.complete.obs")
[1] 0.5518886
#cor(x = DF_USA_T$WorkWeekHrs,y = DF_USA_T$Age, use = "complete.obs")
#cor(x = DF_LA_T$WorkWeekHrs,y = DF_LA_T$Age, use = "complete.obs")
#cor(x = DF_USA_T$WorkWeekHrs,y = DF_USA_T$Age1stCode, use = "complete.obs")
#cor(x = DF_LA_T$WorkWeekHrs,y = DF_LA_T$Age1stCode, use = "complete.obs")
#cor(x = DF_USA_T$WorkWeekHrs,y = DF_USA_T$ConvertedComp, use = "complete.obs")
#cor(x = DF_LA_T$WorkWeekHrs,y = DF_LA_T$ConvertedComp, use = "complete.obs")
#cor(x = DF_USA_T$WorkWeekHrs,y = DF_USA_T$YearsCodePro, use = "complete.obs")
#cor(x = DF_LA_T$WorkWeekHrs,y = DF_LA_T$YearsCodePro, use = "complete.obs")
#cor(x = DF_USA_T$Age1stCode,y = DF_USA_T$Age, use = "complete.obs")
#cor(x = DF_LA_T$Age1stCode,y = DF_LA_T$Age, use = "complete.obs")
#cor(x = DF_USA_T$Age1stCode,y = DF_USA_T$ConvertedComp, use = "complete.obs")
#cor(x = DF_LA_T$Age1stCode,y = DF_LA_T$ConvertedComp, use = "complete.obs")
#cor(x = DF_USA_T$Age1stCode,y = DF_USA_T$YearsCodePro, use = "complete.obs")
#cor(x = DF_LA_T$Age1stCode,y = DF_LA_T$YearsCodePro, use = "complete.obs")
#cor(x = DF_USA_T$Age,y = DF_USA_T$ConvertedComp, use = "complete.obs")
#cor(x = DF_LA_T$Age, y = DF_LA_T$ConvertedComp, use = "complete.obs")
#cor(x = DF_USA_T$Age,y = DF_USA_T$YearsCodePro, use = "complete.obs")
#cor(x = DF_LA_T$Age, y = DF_LA_T$YearsCodePro, use = "complete.obs")
#cor(x = DF_USA_T$YearsCodePro,y = DF_USA_T$Age1stCode, use = "complete.obs")
#cor(x = DF_LA_T$YearsCodePro, y = DF_LA_T$Age1stCode, use = "complete.obs")


#DF_TEMP <- DF_MIX[DF_MIX$Region == "América Latina" & !is.na(DF_MIX$Region), ]
#cor(x = DF_TEMP$WorkWeekHrs,y = DF_TEMP$Age, use = "complete.obs")
#cor(x = DF_TEMP$WorkWeekHrs,y = DF_TEMP$Age1stCode, use = "complete.obs")
#cor(x = DF_TEMP$WorkWeekHrs,y = DF_TEMP$ConvertedComp, use = "complete.obs")
#cor(x = DF_TEMP$WorkWeekHrs,y = DF_TEMP$YearsCodePro, use = "complete.obs")
#cor(x = DF_TEMP$Age1stCode,y = DF_TEMP$Age, use = "complete.obs")
#cor(x = DF_TEMP$Age1stCode,y = DF_TEMP$ConvertedComp, use = "complete.obs")
#cor(x = DF_TEMP$Age1stCode,y = DF_TEMP$YearsCodePro, use = "complete.obs")
#cor(x = DF_TEMP$Age, y = DF_TEMP$ConvertedComp, use = "complete.obs")
#cor(x = DF_TEMP$Age, y = DF_TEMP$YearsCodePro, use = "complete.obs")
#cor(x = DF_TEMP$YearsCodePro, y = DF_TEMP$ConvertedComp, use = "complete.obs")

DF_USA_T <- DF_USA[DF_USA$Employment == "Independent contractor, freelancer, or self-employed" & !is.na(DF_USA$Employment), ]
DF_LA_T <- DF_LA[DF_LA$Employment  == "Independent contractor, freelancer, or self-employed"  & !is.na(DF_LA$Employment), ]

cor(x = DF_USA_T$WorkWeekHrs,y = DF_USA_T$Age, use = "pairwise.complete.obs")
[1] 0.104335
cor(x = DF_LA_T$WorkWeekHrs,y = DF_LA_T$Age, use = "pairwise.complete.obs")
[1] 0.1410907
cor(x = DF_USA_T$WorkWeekHrs,y = DF_USA_T$Age1stCode, use = "pairwise.complete.obs")
[1] 0.04278707
cor(x = DF_LA_T$WorkWeekHrs,y = DF_LA_T$Age1stCode, use = "pairwise.complete.obs")
[1] 0.09309786
cor(x = DF_USA_T$WorkWeekHrs,y = DF_USA_T$ConvertedComp, use = "pairwise.complete.obs")
[1] 0.07792085
cor(x = DF_LA_T$WorkWeekHrs,y = DF_LA_T$ConvertedComp, use = "pairwise.complete.obs")
[1] 0.03135547
cor(x = DF_USA_T$WorkWeekHrs,y = DF_USA_T$YearsCodePro, use = "pairwise.complete.obs")
[1] 0.08413427
cor(x = DF_LA_T$WorkWeekHrs,y = DF_LA_T$YearsCodePro, use = "pairwise.complete.obs")
[1] 0.09654842
cor(x = DF_USA_T$Age1stCode,y = DF_USA_T$Age, use = "pairwise.complete.obs")
[1] 0.2286991
cor(x = DF_LA_T$Age1stCode,y = DF_LA_T$Age, use = "pairwise.complete.obs")
[1] 0.09012602
cor(x = DF_USA_T$Age1stCode,y = DF_USA_T$ConvertedComp, use = "pairwise.complete.obs")
[1] 0.04488727
cor(x = DF_LA_T$Age1stCode,y = DF_LA_T$ConvertedComp, use = "pairwise.complete.obs")
[1] -0.07274774
cor(x = DF_USA_T$Age1stCode,y = DF_USA_T$YearsCodePro, use = "pairwise.complete.obs")
[1] 0.007473836
cor(x = DF_LA_T$Age1stCode,y = DF_LA_T$YearsCodePro, use = "pairwise.complete.obs")
[1] -0.1327145
cor(x = DF_USA_T$Age,y = DF_USA_T$ConvertedComp, use = "pairwise.complete.obs")
[1] 0.1589957
cor(x = DF_LA_T$Age, y = DF_LA_T$ConvertedComp, use = "pairwise.complete.obs")
[1] 0.1323922
cor(x = DF_USA_T$Age,y = DF_USA_T$YearsCodePro, use = "pairwise.complete.obs")
[1] 0.8732654
cor(x = DF_LA_T$Age, y = DF_LA_T$YearsCodePro, use = "pairwise.complete.obs")
[1] 0.8556371
cor(x = DF_USA_T$YearsCodePro,y = DF_USA_T$ConvertedComp, use = "pairwise.complete.obs")
[1] 0.1493406
cor(x = DF_LA_T$YearsCodePro, y = DF_LA_T$ConvertedComp, use = "pairwise.complete.obs")
[1] 0.1475181
table(DF_LA$Employment)

                                  Employed full-time 
                                                1811 
                                  Employed part-time 
                                                  82 
Independent contractor, freelancer, or self-employed 
                                                 272 
              Not employed, and not looking for work 
                                                   3 
                  Not employed, but looking for work 
                                                  66 
                                             Retired 
                                                   1 
                                             Student 
                                                  31 
table(DF_USA$Employment)

                                  Employed full-time 
                                                6601 
                                  Employed part-time 
                                                  92 
Independent contractor, freelancer, or self-employed 
                                                 448 
              Not employed, and not looking for work 
                                                   7 
                  Not employed, but looking for work 
                                                 132 
                                             Retired 
                                                  19 
                                             Student 
                                                  93 

Bibliografía